# Maintainer: Chih-Hsuan Yen <yan12125@archlinux.org>
# Contributor: Guillaume Horel <guillaume.horel@gmail.com>

pkgname=python-moto
_pkgname=moto
# https://github.com/spulec/moto/blob/master/CHANGELOG.md
pkgver=4.1.4
pkgrel=3
pkgdesc='Moto is a library to mock out the boto library.'
arch=(any)
url='https://github.com/spulec/moto'
license=(Apache)
# NOTE: Keep the order of dependencies matching setup.cfg
# setup.cfg includes setuptools, which is a work around for missing dependencies in aws-xray-sdk [1].
# I use the correct dependency in python-aws-xray-sdk, so python-setuptools is not needed here.
# [1] https://github.com/spulec/moto/pull/4142
depends=(python python-boto3 python-botocore python-cryptography python-requests python-xmltodict
         python-werkzeug python-dateutil python-responses
         python-jinja
         # urllib3 is used by cfnresponse.py, not directly by moto - just to make namcap happy
         python-urllib3)
makedepends=(python-build python-installer python-setuptools python-wheel)
# See reqquirements-test.txt, excluding pytest-cov
checkdepends=(python-pytest python-sure python-freezegun)
# Below are optional dependencies. The order matches _dep_* items in upstream `setup.cfg`.
# Note that _dep_python_jose_ecdsa_pin and _dep_idna are excluded as they are pins and
# not used by moto.
optdepends=(
  'python-yaml: for apigatewayv2, cloudformation, s3 and ssm'
  'python-jose: for apigateway, cloudformation and cognitoidp'
  'python-openapi-spec-validator: for apigateway and cloudformation'
  # SNS and SQS still uses docker indirectly, while upstream explicitly removes them
  # https://github.com/spulec/moto/pull/4094
  'python-docker: for awslambda, batch, cloudformation, dynamodb2 and dynamodbstreams'
  'python-graphql-core: For appsync and cloudformation'
  'python-jsondiff: for iotdata and cloudformation'
  'python-aws-xray-sdk: for xray and cloudformation'
  'python-cfn-lint: for cloudformation'
  'python-sshpubkeys: for ec2, ebs, efs, directoryservice and cloudformation'
  'python-pyparsing: for glue and cloudformation'
  'python-flask: for moto_server'
  'python-flask-cors: for moto_server'
)
checkdepends+=(python-yaml python-jose python-openapi-spec-validator python-docker
               python-graphql-core python-jsondiff python-aws-xray-sdk
               python-cfn-lint python-sshpubkeys python-pyparsing python-flask python-flask-cors)
source=("https://files.pythonhosted.org/packages/source/m/moto/moto-${pkgver}.tar.gz")
sha256sums=('304cb19eee0019cd13f7d87ca590a4694677469c383ab8f8439fcb6717c47037')

prepare() {
  cd $_pkgname-$pkgver

  cp setup.cfg{,.orig}

  # AWS Lambda and Batch tests require docker/podman, while running docker/podman
  # in systemd-nspawn containers appears impossible without special configurations -
  # disable them altogether
  sed -i '/markers\s*=/a \ \ \ \ needs_docker: marks test which require docker' setup.cfg
  find tests \( -name '*.py' -a ! -name __init__.py \) -print0 | xargs -I % -0 bash -c '
    sed -i -E "%" \
      -e "/__future__/a import pytest" \
      -e "s/^(\s*)(@mock_batch)$/\1\2\n\1@pytest.mark.needs_docker/" \
      -e "s/^(\s*)(@mock_lambda)$/\1\2\n\1@pytest.mark.needs_docker/"
    grep __future__ "%" || sed -i "1i import pytest" "%"
  '

  # Remove upper bounds of dependencies
  sed -i -r 's#,?<[0-9.]+,?##;s#==([0-9.]+)#>=\1#' setup.cfg
  diff -u setup.cfg{.orig,} || true
}

build() {
  cd $_pkgname-$pkgver

  python -m build --wheel --no-isolation
}

check() {
  cd $_pkgname-$pkgver

  PYTHONDONTWRITEBYTECODE=1 TZ=UTC pytest tests -m 'not needs_docker'
}

package() {
  cd $_pkgname-$pkgver

  python -m installer --destdir="$pkgdir" dist/*.whl
}
